﻿namespace Creek.UI.Effects
{
    using System;

    /// <summary>
    /// 	This class manages a linear transition. The percentage complete for the transition
    /// 	increases linearly with time.
    /// </summary>
    public class TransitionType_Linear : ITransitionType
    {
        #region Fields

        private readonly double m_dTransitionTime = 0.0;

        #endregion

        #region Constructors and Destructors

        /// <summary>
        /// 	Constructor. You pass in the time (in milliseconds) that the
        /// 	transition will take.
        /// </summary>
        public TransitionType_Linear(int iTransitionTime)
        {
            if (iTransitionTime <= 0)
            {
                throw new Exception("Transition time must be greater than zero.");
            }
            this.m_dTransitionTime = iTransitionTime;
        }

        #endregion

        #region Public Methods and Operators

        /// <summary>
        /// 	We return the percentage completed.
        /// </summary>
        public void onTimer(int iTime, out double dPercentage, out bool bCompleted)
        {
            dPercentage = (iTime / this.m_dTransitionTime);
            if (dPercentage >= 1.0)
            {
                dPercentage = 1.0;
                bCompleted = true;
            }
            else
            {
                bCompleted = false;
            }
        }

        #endregion
    }
}